package com.nicolascarrascob.clientesoap;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.google.gson.JsonObject;

public class AddSalaActivity extends Activity {

	private String URL = Constantes.HOST + "/ServicioWebSoap/services/CarteleraCineORMWS";
	private String NAMESPACE = "http://ws.serviciosoap.pds.nicolascarrascob.com";

	ArrayList<String> peliculas;
	Spinner peliculasSpinner;
	EditText nombreEditText;
	EditText numSalasEditText;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_addsala);
		peliculas = new ArrayList<String>();
		peliculasSpinner = (Spinner) findViewById(R.id.addsala_pelicula);
		nombreEditText = (EditText) findViewById(R.id.addsala_nombre);
		numSalasEditText = (EditText) findViewById(R.id.addsala_butacas);
		new ObtenerPeliculasBackground().execute();
	}

	public void ingresarSala(View v){
		JsonObject jsonObjectSala = new JsonObject();
		jsonObjectSala.addProperty("nomSala", nombreEditText.getText().toString());
		jsonObjectSala.addProperty("numButacas", numSalasEditText.getText().toString());
		jsonObjectSala.addProperty("pelicula_id", peliculas.get(peliculasSpinner.getSelectedItemPosition()));
		new AddSalaBackground().execute(jsonObjectSala.toString());
	}

	class ObtenerPeliculasBackground extends AsyncTask<Void, Void, String>{
		
		private ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
    		progressDialog = ProgressDialog.show(
    				AddSalaActivity.this,
    				"Cartelera de Cine", 
    				"Espere mientras se carga la cartelera...", 
    				true);
			super.onPreExecute();
		}
		
		@Override
		protected String doInBackground(Void... params) {

			String resultadoJSON="";
	    	String METHOD_NAME = "getCartelera";
	    	String SOAP_ACTION = NAMESPACE +"/" +METHOD_NAME;
			SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			soapEnvelope.dotNet = true;
			soapEnvelope.implicitTypes =true;
			soapEnvelope.setOutputSoapObject(request);

			HttpTransportSE aht = new HttpTransportSE(URL);
			Log.d("Cliente SOAP", "Iniciando Consulta");
			try {
				aht.call(SOAP_ACTION, soapEnvelope);
				SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
				resultadoJSON = resultString.toString();
				Log.d("Cliente SOAP", "Finalizando Consulta");
				
				
			} catch (IOException e) {
				e.printStackTrace();
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			}
	    
			return resultadoJSON;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			progressDialog.dismiss();
			if("".equals(result)){
				Toast.makeText(AddSalaActivity.this, "Error al obtener la informacion necesaria", Toast.LENGTH_LONG).show();
			}else{
				try {
					ArrayList<String> peliculasList = new ArrayList<String>();
					String texto = "";
					Log.d("", result);
					JSONObject resultado = new JSONObject(result);
					texto += resultado.getString("Titulo") +"\n";
					String contenido = resultado.getString("Contenido");
					Log.d("ClienteSoap", contenido);
					JSONArray peliculasJSONArray = new JSONArray(contenido);
					int cantPeliculas = peliculasJSONArray.length();
					for(int i = 0; i< cantPeliculas; i ++){
						peliculas.add(peliculasJSONArray.getJSONObject(i).getString("Id"));
						peliculasList.add(peliculasJSONArray.getJSONObject(i).getString("Titulo"));
					}
					
					ArrayAdapter<String> generosAdapter = new ArrayAdapter<String>(AddSalaActivity.this, android.R.layout.simple_spinner_item, peliculasList);
					peliculasSpinner.setAdapter(generosAdapter);
					
				} catch (JSONException e) {
					Toast.makeText(AddSalaActivity.this, "Error al obtener la informacion necesaria", Toast.LENGTH_LONG).show();
				}
			}
		}
		
	}

	class AddSalaBackground extends AsyncTask<String, Void, String>{
		
		private ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
    		progressDialog = ProgressDialog.show(
    				AddSalaActivity.this,
    				"Salas de Cine", 
    				"Espere mientras se agrega la sala...", 
    				true);
			super.onPreExecute();
		}
		
		@Override
		protected String doInBackground(String... params) {

			String resultado = new String();
			String METHOD_NAME = "addSala";
			String SOAP_ACTION = NAMESPACE +"/" +METHOD_NAME;
			SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			soapEnvelope.dotNet = true;
			soapEnvelope.implicitTypes = true;
			soapEnvelope.setOutputSoapObject(request);

			request.addProperty("jsonPelicula", params[0]);

			HttpTransportSE aht = new HttpTransportSE(URL);

			try {
				aht.call(SOAP_ACTION, soapEnvelope);
				SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
				resultado = resultString.toString();

			} catch (IOException e) {
				e.printStackTrace();
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			}

			return resultado;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			progressDialog.dismiss();
			//Valido que tenga la informacion necesaria
			if("1".equals(result)){
				Toast.makeText(AddSalaActivity.this, "Ingresada correctamente", Toast.LENGTH_LONG).show();
				finish();
			}else{
				Toast.makeText(AddSalaActivity.this, "Error al obtener la informacion necesaria", Toast.LENGTH_LONG).show();
			}
		}
	}


	
	
	
}
